home *** CD-ROM | disk | FTP | other *** search
/ Mastering Computers 3 / Mastering Computers Vol 3.iso / Windows 3.1x / drivers / ARTPAD.EXE / SETUPAPI.IN_ / SETUPAPI.IN
Encoding:
Text File  |  1993-10-19  |  23.9 KB  |  787 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_STANDARD =   16
  12. CONST WF_ENHANCED =   32
  13.  
  14.  
  15. '' DoMsgBox Flags
  16.  
  17. CONST MB_OK          = 0
  18. CONST MB_ICONHAND    = 16
  19. CONST MB_TASKMODAL   = 8192
  20.  
  21.  
  22. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  23. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  24. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  25. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  26. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  27. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  28. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  29.  
  30.  
  31.  
  32.  
  33. '**************************************************************************
  34. '****************************** Setup Constants ***************************
  35. '**************************************************************************
  36.  
  37.  
  38. ''Command Option Flags
  39.  
  40. CONST cmoVital       = 1
  41. CONST cmoCopy        = 2
  42. CONST cmoUndo        = 4
  43. CONST cmoRoot        = 8
  44. CONST cmoDecompress  = 16
  45. CONST cmoTimeStamp   = 32
  46. CONST cmoReadOnly    = 64
  47. CONST cmoForce       = 256
  48. CONST cmoRemove      = 512
  49. CONST cmoOverwrite   = 1024
  50. CONST cmoAppend      = 2048
  51. CONST cmoPrepend     = 4096
  52. CONST cmoNone        = 0
  53. CONST cmoAll         = 65535
  54.  
  55.  
  56. ''File Exist Modes
  57.  
  58. CONST femExists     = 0
  59. CONST femRead       = 1
  60. CONST femWrite      = 2
  61. CONST femReadWrite  = 3
  62.  
  63.  
  64. ''Read-Only Return Code
  65.  
  66. CONST ynrcNo         = 0
  67. CONST ynrcYes        = 1
  68. CONST ynrcErr1       = 2
  69. CONST ynrcErr2       = 3
  70. CONST ynrcErr3       = 4
  71. CONST ynrcErr4       = 5
  72. CONST ynrcErr5       = 6
  73. CONST ynrcErr6       = 7
  74. CONST ynrcErr7       = 8
  75. CONST ynrcErr8       = 9
  76. CONST ynrcErr9       = 10
  77.  
  78.  
  79. ''General Return Codes
  80.  
  81. CONST grcOkay       = 0
  82. CONST grcNotOkay    = 1
  83. CONST grcUserQuit   = 48
  84.  
  85.  
  86. ''Ranges
  87.  
  88. ''CONST cbSymValMax = 8192
  89. CONST cbSymValMax = 512
  90.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  91.     '' but we get Out of String Space wattdrvr error if we alloc
  92.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  93.     '' We should look into using dynamic far alloc instead of
  94.     '' STRING$ for large buffers.
  95.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  96.  
  97.  
  98. ''ON ERROR Error Codes
  99. CONST STFERR      = 1024   ''setup system error
  100. CONST STFQUIT     = 1025   ''user quit
  101.  
  102. CONST scmOff      = 0
  103. CONST scmOnIgnore = 1
  104. CONST scmOnFatal  = 2
  105.  
  106.  
  107. '**************************************************************************
  108. '********************************  Setup API's  ***************************
  109. '**************************************************************************
  110.  
  111. '' common
  112.  
  113. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  114. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  115. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  116. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  117. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  118. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  119. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  120.  
  121. ''shell
  122.  
  123. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  124. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  125. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  126. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  127. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  128. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  129. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  130. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  131. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  132. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  133. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  134.  
  135.  
  136. ''shell
  137.  
  138. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  139. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  140. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  141.  
  142.  
  143.  
  144. ''install
  145.  
  146. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  147. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  148. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  149. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  150. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  151. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  152. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  153. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  154. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  155. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  156. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  157. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  158. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  159. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  160. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  161. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  162. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  163. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  164. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  165. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  166. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  167. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  168. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  169. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  170. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  171. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  172. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  173. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  174.  
  175. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  176.  
  177.  
  178.  
  179. '*************************************************************************
  180. '****************  Setup Basic Wrapper Declarations  *********************
  181. '*************************************************************************
  182.  
  183.  
  184. ''shell
  185.  
  186. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  187. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  188. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  189. DECLARE SUB UIPop (n%)
  190. DECLARE SUB UIPopAll
  191. DECLARE SUB SetTitle (sz$)
  192. DECLARE SUB ReadInfFile (szFile$)
  193. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  194. DECLARE SUB RemoveSymbol (szSym$)
  195. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  196. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  197. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  198. DECLARE SUB AddListItem(szSymbol$, szItem$)
  199.  
  200. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  201. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  202.  
  203. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  204. DECLARE SUB RestoreCursor (hPrev%)
  205.  
  206. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  207. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  208.  
  209.  
  210.  
  211.  
  212. ''install
  213.  
  214.  
  215. DECLARE SUB CreateDir (szDir$, cmo%)
  216. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  217. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  218. DECLARE SUB CopyFilesInCopyList
  219. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  220. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  221. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  222. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  223. DECLARE SUB DumpCopyList (szFile$)
  224. DECLARE SUB ClearCopyList
  225. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  226. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  227. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  228. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  229. DECLARE SUB InitInstall
  230. DECLARE SUB SetCopyGaugePosition (x%, y%)
  231. DECLARE SUB SetRestartDir(szDir$)
  232. DECLARE FUNCTION RestartListEmpty AS INTEGER
  233. DECLARE FUNCTION ExitExecRestart AS INTEGER
  234. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  235. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  236. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  237. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  238. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  239.  
  240.  
  241. '' Error Handling
  242.  
  243.  
  244. '' Windows system detect
  245.  
  246. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  247. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  248. DECLARE FUNCTION GetWindowsMode AS INTEGER
  249. DECLARE FUNCTION GetWindowsDir  AS STRING
  250. DECLARE FUNCTION GetWindowsSysDir AS STRING
  251. DECLARE FUNCTION IsWindowsShared AS INTEGER
  252. DECLARE FUNCTION GetScreenWidth AS INTEGER
  253. DECLARE FUNCTION GetScreenHeight AS INTEGER
  254.  
  255.  
  256. '*************************************************************************
  257. '*****************  Setup Basic Wrapper Definitions  *********************
  258. '*************************************************************************
  259. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  260.     fFrameInit = 0
  261.     fInstallInit = 0
  262.  
  263.     i% = InitFrame(szCmdLine$)
  264.     fFrameInit = 1
  265.  
  266.     InitInstall
  267.     fInstallInit = 1
  268.  
  269.     InitSetup = i%
  270. END FUNCTION
  271.  
  272.  
  273.  
  274. '**************************************************************************
  275. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  276.     IF hSetup > 0 THEN
  277.     
  278.     ELSE
  279.     i% = InitializeFrame(szCmdLine$)
  280.     IF i% = -1 THEN
  281.         END   '' NOT an error - Usage (/?) or Command line copy operation
  282.     ELSEIF i% = 0 THEN
  283.         
  284.         END
  285.     ELSE
  286.         InitFrame = i%
  287.     END IF
  288.     END IF
  289. END FUNCTION
  290.  
  291.  
  292. '**************************************************************************
  293. SUB SetBitmap(szDll$, Bitmap%) STATIC
  294.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  295.     ERROR STFERR
  296.     END IF
  297. END SUB
  298.  
  299.  
  300. '**************************************************************************
  301. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  302.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  303.     ERROR STFERR
  304.     END IF
  305. END SUB
  306.  
  307.  
  308. '*************************************************************************
  309. SUB SetTitle(sz$) STATIC
  310.     SetWindowText HwndFrame(), sz$
  311. END SUB
  312.  
  313.  
  314. '*************************************************************************
  315. SUB ReadInfFile (szFile$) STATIC
  316.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  317.     ERROR STFERR
  318.     END IF
  319. END SUB
  320.  
  321.  
  322. '*************************************************************************
  323. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  324.  
  325.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  326.     ERROR STFERR
  327.     ELSE
  328.     UIStartDlg = GetSymbolValue("DLGEVENT")
  329.     END IF
  330. END FUNCTION
  331.  
  332.  
  333. '*************************************************************************
  334. SUB UIPop (n%) STATIC
  335.     IF FKillNDialogs(n%) = 0 THEN
  336.     ERROR STFERR
  337.     END IF
  338. END SUB
  339.  
  340.  
  341. '*************************************************************************
  342. SUB UIPopAll STATIC
  343.     IF FKillNDialogs(65535) = 0 THEN
  344.     ERROR STFERR
  345.     END IF
  346. END SUB
  347.  
  348.  
  349. '*************************************************************************
  350. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  351.     szValue$ = string$(cbSymValMax,32)
  352.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  353.     GetSymbolValue = szValue$
  354.     IF Length% >= cbSymValMax THEN
  355.     res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  356.     ERROR STFERR
  357.     END IF
  358.     IF szSymbol$ = "" THEN
  359.     ERROR STFERR
  360.     END IF
  361.     szValue$ = ""
  362. END FUNCTION
  363.  
  364.  
  365. '*************************************************************************
  366. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  367.     GetListLength = UsGetListLength(szSymbol$)
  368.     IF szSymbol$ = "" THEN
  369.     ERROR STFERR
  370.     END IF
  371. END FUNCTION
  372.  
  373.  
  374. '*************************************************************************
  375. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  376.     szListItem$ = string$(cbSymValMax,32)
  377.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  378.     GetListItem = szListItem$
  379.     IF Length% >= cbSymValMax THEN
  380.     res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  381.     ERROR STFERR
  382.     END IF
  383.     IF szListSymbol$ = "" THEN
  384.     ERROR STFERR
  385.     END IF
  386.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  387.     ERROR STFERR
  388.     end if
  389.     szListItem$ = ""
  390. END FUNCTION
  391.  
  392.  
  393. '*************************************************************************
  394. SUB AddListItem(szSymbol$, szItem$) STATIC
  395.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  396.     ERROR STFERR
  397.     END IF
  398. END SUB
  399.  
  400.  
  401. '*************************************************************************
  402. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  403.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  404.     ERROR STFERR
  405.     END IF
  406. END SUB
  407.  
  408.  
  409. '*************************************************************************
  410. SUB RemoveSymbol(szSym$) STATIC
  411.     IF FRemoveSymbol(szSym$) = 0 THEN
  412.     ERROR STFERR
  413.     END IF
  414. END SUB
  415.  
  416.  
  417. '*************************************************************************
  418. FUNCTION ShowWaitCursor STATIC AS INTEGER
  419.     ShowWaitCursor = HShowWaitCursor
  420. END FUNCTION
  421.  
  422.  
  423. '*************************************************************************
  424. SUB RestoreCursor (hPrev%) STATIC
  425.     i% = FRestoreCursor(hPrev%)
  426.     IF i% = 0 THEN
  427.     ERROR STFERR
  428.     END IF
  429. END SUB
  430.  
  431.  
  432. '*************************************************************************
  433. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  434.     SetBeepingMode = FSetBeepingMode(mode%)
  435. END FUNCTION
  436.  
  437.  
  438. '*************************************************************************
  439. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  440.     SetSilentMode = FSetSilent(mode%)
  441. END FUNCTION
  442.  
  443.  
  444. '*************************************************************************
  445. SUB InitInstall STATIC
  446.     IF hSetup > 0 THEN
  447.     
  448.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  449.     END
  450.     END IF
  451. END SUB
  452.  
  453.  
  454. '*************************************************************************
  455. SUB CreateDir (szDir$, cmo%) STATIC
  456.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  457.     ERROR STFERR
  458.     END IF
  459. END SUB
  460.  
  461.  
  462.  
  463. '*************************************************************************
  464. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  465.  
  466.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  467.     ERROR STFERR
  468.     END IF
  469. END SUB
  470.  
  471.  
  472. '*************************************************************************
  473. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  474.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  475.     ERROR STFERR
  476.     END IF
  477. END SUB
  478.  
  479.  
  480. '*************************************************************************
  481. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  482.  
  483.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  484.     ERROR STFERR
  485.     END IF
  486. END SUB
  487.  
  488.  
  489.  
  490. '*************************************************************************
  491. SUB DumpCopyList (szFile$) STATIC
  492.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  493.     ERROR STFERR
  494.     END IF
  495. END SUB
  496.  
  497.  
  498. '*************************************************************************
  499. SUB ClearCopyList STATIC
  500.     ResetCopyList
  501. END SUB
  502.  
  503.  
  504. '*************************************************************************
  505. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  506.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  507.     IF lNeed& < 0 THEN
  508.     ERROR STFERR
  509.     END IF
  510.     GetCopyListCost = lNeed&
  511. END FUNCTION
  512.  
  513.  
  514. '*************************************************************************
  515. SUB CopyFilesInCopyList STATIC
  516.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  517.  
  518.     IF grc% = grcUserQuit THEN
  519.     ERROR STFQUIT
  520.     ELSEIF grc% > 0 THEN
  521.     ERROR STFERR
  522.     END IF
  523. END SUB
  524.  
  525.  
  526. '*************************************************************************
  527. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  528.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  529.     ERROR STFERR
  530.     END IF
  531. END SUB
  532.  
  533. '*************************************************************************
  534. SUB RenameFile (szFullPath$, szBackup$) STATIC
  535.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  536.     ERROR STFERR
  537.     END IF
  538. END SUB
  539.  
  540.  
  541.  
  542. '*************************************************************************
  543. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  544.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  545.     ERROR STFERR
  546.     END IF
  547. END SUB
  548.  
  549.  
  550. '*************************************************************************
  551. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  552.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  553.     ERROR STFERR
  554.     END IF
  555. END SUB
  556.  
  557.  
  558. '*************************************************************************
  559. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  560.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  561.     ERROR STFERR
  562.     END IF
  563. END SUB
  564.  
  565.  
  566.  
  567. ''' -1 in either parameter will mean 'center in frame client area'
  568. '*************************************************************************
  569. SUB SetCopyGaugePosition (x%, y%) STATIC
  570.     ProSetPos x%, y%
  571. END SUB
  572.  
  573.  
  574. '*************************************************************************
  575. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  576.     szBuf$ = STRING$(512, 32)
  577.  
  578.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  579.     IF wRet% = 0 THEN
  580.     FindFileUsingFileOpen = szBuf$
  581.     ELSEIF wRet% = 1 THEN
  582.     FindFileUsingFileOpen = ""
  583.     ELSE
  584.     ERROR STFERR
  585.     END IF
  586.  
  587.     szBuf$ = ""
  588. END FUNCTION
  589.  
  590.  
  591. '*************************************************************************
  592. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  593.     IsDirWritable = FIsDirWritable(szDir$)
  594. END FUNCTION
  595.  
  596.  
  597. '*************************************************************************
  598. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  599.     IsFileWritable = FIsFileWritable(szFile$)
  600. END FUNCTION
  601.  
  602.  
  603. '*************************************************************************
  604. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  605.     IF iField% < 1 THEN
  606.     ERROR STFERR
  607.     END IF
  608.     szStart$ = szLine$
  609.     IF iField% <> 1 THEN
  610.     FOR i% = 2 TO iField% STEP 1
  611.         iNew% = INSTR(szStart$, ",")
  612.         IF iNew% = 0 THEN
  613.         GetNthFieldFromIniString = ""
  614.         GOTO _GNFFIS_END
  615.         END IF
  616.         szStart$ = MID$(szStart$, (iNew% + 1))
  617.     NEXT
  618.     END IF
  619.  
  620.     iNew% = INSTR(szStart$, ",")
  621.     IF iNew% <> 0 THEN
  622.     szStart$ = MID$(szStart$, 1, (iNew% - 1))
  623.     END IF
  624.  
  625.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  626.  
  627. _GNFFIS_END:
  628.  
  629. END FUNCTION
  630.  
  631.  
  632. '*************************************************************************
  633. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  634.     GetWindowsMajorVersion = GetVersion() MOD 256
  635. END FUNCTION
  636.  
  637.  
  638. '*************************************************************************
  639. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  640.     GetWindowsMinorVersion = GetVersion() / 256
  641. END FUNCTION
  642.  
  643.  
  644. '*************************************************************************
  645. FUNCTION GetWindowsMode STATIC AS INTEGER
  646.     GetWindowsMode = 0
  647.     longTmp& = GetWinFlags()
  648.     IF longTmp& AND WF_STANDARD THEN
  649.     GetWindowsMode = 1
  650.     ELSEIF longTmp& AND WF_ENHANCED THEN
  651.     GetWindowsMode = 2
  652.     END IF
  653. END FUNCTION
  654.  
  655.  
  656. '*************************************************************************
  657. FUNCTION GetWindowsDir STATIC AS STRING
  658.     szBuf$ = string$(256, 32)
  659.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  660.  
  661.     IF cbBuf% = 0 THEN
  662.     GetWindowsDir = ""
  663.     ERROR STFERR
  664.     ELSE
  665.     IF cbBuf% > 255 THEN
  666.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  667.         ERROR STFERR
  668.     END IF
  669.     szBuf$ = RTRIM$(szBuf$)
  670.     IF MID$(szBuf$, 1, 1) = "\" THEN
  671.         'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  672.         szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  673.     ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  674.         szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  675.     END IF
  676.     IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  677.         szBuf$ = szBuf$ + "\"
  678.     END IF
  679.     GetWindowsDir = szBuf$
  680.     END IF
  681.  
  682.     szBuf$ = ""
  683. END FUNCTION
  684.  
  685.  
  686. '*************************************************************************
  687. FUNCTION GetWindowsSysDir STATIC AS STRING
  688.     szBuf$ = string$(256, 32)
  689.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  690.  
  691.     IF cbBuf% = 0 THEN
  692.     ERROR STFERR
  693.     ELSE
  694.     IF cbBuf% > 255 THEN
  695.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  696.         ERROR STFERR
  697.     END IF
  698.     szBuf$ = RTRIM$(szBuf$)
  699.     IF MID$(szBuf$, 1, 1) = "\" THEN
  700.         szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  701.     ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  702.         szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  703.     END IF
  704.     IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  705.         szBuf$ = szBuf$ + "\"
  706.     END IF
  707.     GetWindowsSysDir = szBuf$
  708.     END IF
  709.  
  710.     szBuf$ = ""
  711. END FUNCTION
  712.  
  713.  
  714. '*************************************************************************
  715. FUNCTION IsWindowsShared STATIC AS INTEGER
  716.     szWin$ = UCASE$(GetWindowsDir())
  717.     szSys$ = UCASE$(GetWindowsSysDir())
  718.  
  719.     IF len(szWin$) = 0 THEN
  720.     ERROR STFERR
  721.     END IF
  722.  
  723.     IF len(szSys$) <= len(szWin$) THEN
  724.     IsWindowsShared = 1
  725.     ELSE
  726.     szSys$ = MID$(szSys$, 1, len(szWin$))
  727.     IF szWin$ = szSys$ THEN
  728.         IsWindowsShared = 0
  729.     ELSE
  730.         IsWindowsShared = 1
  731.     END IF
  732.     END IF
  733. END FUNCTION
  734.  
  735.  
  736. '*************************************************************************
  737. FUNCTION GetScreenWidth STATIC AS INTEGER
  738.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  739. END FUNCTION
  740.  
  741.  
  742. '*************************************************************************
  743. FUNCTION GetScreenHeight STATIC AS INTEGER
  744.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  745. END FUNCTION
  746.  
  747.  
  748. '*************************************************************************
  749. SUB SetRestartDir (szDir$) STATIC
  750.     IF FSetRestartDir(szDir$) = 0 THEN
  751.     ERROR STFERR
  752.     END IF
  753. END SUB
  754.  
  755.  
  756. '*************************************************************************
  757. FUNCTION RestartListEmpty STATIC AS INTEGER
  758.     IF FRestartListEmpty() = 0 THEN
  759.     RestartListEmpty = 0
  760.     ELSE
  761.     RestartListEmpty = 1
  762.     END IF
  763. END FUNCTION
  764.  
  765.  
  766. '*************************************************************************
  767. FUNCTION ExitExecRestart STATIC AS INTEGER
  768.     ExitExecRestart = FExitExecRestart
  769. END FUNCTION
  770.  
  771.  
  772. '*************************************************************************
  773. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  774.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  775.     ERROR STFERR
  776.     END IF
  777. END SUB
  778.  
  779. TRAP CleanupTrap From "MSSHLSTF.DLL"
  780.  
  781. End Trap
  782.  
  783. hSetup = InitSetup(COMMAND$)
  784.  
  785. ON ERROR GOTO QUIT
  786.  
  787.